/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.widget.TextView;

import com.example.android.apis.R;

/**
 * This Activity actually handles two stages of a launcher shortcut's life
 * cycle.
 * 
 * 1. Your application offers to provide shortcuts to the launcher. When the
 * user installs a shortcut, an activity within your application generates the
 * actual shortcut and returns it to the launcher, where it is shown to the user
 * as an icon.
 * 
 * 2. Any time the user clicks on an installed shortcut, an intent is sent.
 * Typically this would then be handled as necessary by an activity within your
 * application.
 * 
 * We handle stage 1 (creating a shortcut) by simply sending back the
 * information (in the form of an {@link android.content.Intent} that the
 * launcher will use to create the shortcut.
 * 
 * You can also implement this in an interactive way, by having your activity
 * actually present UI for the user to select the specific nature of the
 * shortcut, such as a contact, picture, URL, media item, or action.
 * 
 * We handle stage 2 (responding to a shortcut) in this sample by simply
 * displaying the contents of the incoming {@link android.content.Intent}.
 * 
 * In a real application, you would probably use the shortcut intent to display
 * specific content or start a particular operation.
 */
public class LauncherShortcuts extends Activity {

	private static final String EXTRA_KEY = "com.example.android.apis.app.LauncherShortcuts";

	@Override
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);

		// Resolve the intent

		final Intent intent = getIntent();
		final String action = intent.getAction();

		// If the intent is a request to create a shortcut, we'll do that and
		// exit

		if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
			setupShortcut();
			finish();
			return;
		}

		// If we weren't launched with a CREATE_SHORTCUT intent, simply put up
		// an informative
		// display.

		// Inflate our UI from its XML layout description.

		setContentView(R.layout.launcher_shortcuts);

		// Provide a lightweight view of the Intent that launched us

		TextView intentInfo = (TextView) findViewById(R.id.txt_shortcut_intent);
		String info = intent.toString();
		String extra = intent.getStringExtra(EXTRA_KEY);
		if (extra != null) {
			info = info + " " + extra;
		}
		intentInfo.setText(info);
	}

	/**
	 * This function creates a shortcut and returns it to the caller. There are
	 * actually two intents that you will send back.
	 * 
	 * The first intent serves as a container for the shortcut and is returned
	 * to the launcher by setResult(). This intent must contain three fields:
	 * 
	 * <ul>
	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_INTENT} The shortcut
	 * intent.</li>
	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_NAME} The text that will
	 * be displayed with the shortcut.</li>
	 * <li>{@link android.content.Intent#EXTRA_SHORTCUT_ICON} The shortcut's
	 * icon, if provided as a bitmap, <i>or</i>
	 * {@link android.content.Intent#EXTRA_SHORTCUT_ICON_RESOURCE} if provided
	 * as a drawable resource.</li>
	 * </ul>
	 * 
	 * If you use a simple drawable resource, note that you must wrapper it
	 * using {@link android.content.Intent.ShortcutIconResource}, as shown
	 * below. This is required so that the launcher can access resources that
	 * are stored in your application's .apk file. If you return a bitmap, such
	 * as a thumbnail, you can simply put the bitmap into the extras bundle
	 * using {@link android.content.Intent#EXTRA_SHORTCUT_ICON}.
	 * 
	 * The shortcut intent can be any intent that you wish the launcher to send,
	 * when the user clicks on the shortcut. Typically this will be
	 * {@link android.content.Intent#ACTION_VIEW} with an appropriate Uri for
	 * your content, but any Intent will work here as long as it triggers the
	 * desired action within your Activity.
	 */
	private void setupShortcut() {
		// First, set up the shortcut intent. For this example, we simply create
		// an intent that
		// will bring us directly back to this activity. A more typical
		// implementation would use a
		// data Uri in order to display a more specific result, or a custom
		// action in order to
		// launch a specific operation.

		Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
		shortcutIntent.setClassName(this, this.getClass().getName());
		shortcutIntent.putExtra(EXTRA_KEY, "ApiDemos Provided This Shortcut");

		// Then, set up the container intent (the response to the caller)

		Intent intent = new Intent();
		intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
		intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
				getString(R.string.shortcut_name));
		Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this,
				R.drawable.app_sample_code);
		intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);

		// Now, return the result to the launcher

		setResult(RESULT_OK, intent);
	}
}
